# test_api_basic.py

from formatter import NullWriter

# headers={"userId":str(Test_mall.userid),"sessionId":Test_mall.sessionid}
#movieID=18

import pytest
import json

from Tools.scripts.fixdiv import report

from Tool.tool import ApiRequestTool# 导入工具类

# 基础配置（根据你的实际接口修改）
BASE_URL = "http://10.59.9.18"  # 你的服务基础地址
# 接口路径（根据你的实际接口修改）
LOGIN_PATH = "/movieApi/user/v2/login"  # 登录接口（POST）
MOVIE_LIST_PATH = "/movieApi/movie/v2/findHotMovieList"  # 商品列表（GET）
MOVIE_XQ_Path = "/movieApi/movie/v2/findMoviesDetail"  # 用户信息修改（PUT）
MOVIE_PL_PATH = "/movieApi/movie/v1/findCommentReply"  # 商品删除（DELETE）
MOVIE_XD_PATH = "/movieApi/movie/v2/verify/buyMovieTickets"
MOVIE_ZF_PATH = "/movieApi/movie/v2/verify/pay"
MOVIE_GZ_PATH = "/movieApi/movie/v1/verify/followMovie"
MOVIE_QXGZ_PATH = "/movieApi/movie/v1/verify/cancelFollowMovie"
# 初始化工具类（整个测试模块复用 1 个实例，保持会话）
@pytest.fixture(scope="module")
def api_tool():
    return ApiRequestTool(base_url=BASE_URL)


class TestPinTuan():
    userid = None
    sessionid = None
    # 测试 1：POST 请求（登录接口）
    def test_post_login(self,api_tool):
        print("\n=== 测试 POST 登录接口 ===")
        # 登录参数（根据你的接口字段修改）
        login_data = {"email": "1478997572@qq.com", "pwd": "eWLPHopE945d2ivttHaQTQ=="}
        # 调用工具类 POST 方法
        status_code, response_text, response = api_tool.post(path=LOGIN_PATH, data=login_data)

        # 提取userid和sessionid
        TestPinTuan.userid = response['result']['userId']
        TestPinTuan.sessionid = response['result']['sessionId']
        print(TestPinTuan.userid,TestPinTuan.sessionid)
        print(type(TestPinTuan.userid))

        # 基础断言（验证状态码 + 响应包含预期文本）
        assert status_code == 200, f"登录接口状态码错误：预期 200，实际 {status_code}"
        assert "你的益达" in response_text, f"登录失败，响应：{response_text[:50]}"

        print(f"状态码：{status_code}")
        print(f"响应内容：{response_text}")

    #查询热门电影
    def test_movie_list(self,api_tool):
        print("\n=== 测试 POST 登录接口 ===")
        # 调用工具类 POST 方法
        list_params = {"page": 3,"count":2}
        status_code, response_text,response= api_tool.get(path=MOVIE_LIST_PATH,params=list_params,
                                                 head={"userId": str(TestPinTuan.userid),
                                                       "sessionId": str(TestPinTuan.sessionid)}
                                                 )

        # 基础断言（验证状态码 + 响应包含预期文本）
        assert status_code == 200, f"登录接口状态码错误：预期 200，实际 {status_code}"
        assert "黄金兄弟" in response_text, f"登录失败，响应：{response_text[:50]}"

        print(f"状态码：{status_code}")
        print(f"响应内容：{response_text}")

    #查询电影详情
    def test_movie_xq(self, api_tool):
        print("\n=== 测试 POST 登录接口 ===")
        # 调用工具类 POST 方法
        list_params = {"movieId":18}
        status_code, response_text,response= api_tool.get(path=MOVIE_XQ_Path, params=list_params,
                                                  head={"userId":str(TestPinTuan.userid),"sessionId":str(TestPinTuan.sessionid)})

        # 基础断言（验证状态码 + 响应包含预期文本）
        assert status_code == 200, f"登录接口状态码错误：预期 200，实际 {status_code}"
        assert "动作 / 剧情 / 犯罪" in response_text, f"登录失败，响应：{response_text[:50]}"

        print(f"状态码：{status_code}")
        print(f"响应内容：{response_text}")


    #查询电影评论
    def test_movie_pl(self, api_tool):
        print("\n=== 测试 POST 登录接口 ===")
        # 调用工具类 POST 方法
        list_params = {"commentId":1,"page":3,"count":2}
        status_code, response_text,response= api_tool.get(path=MOVIE_PL_PATH, params=list_params,
                                                  head={"userId":str(TestPinTuan.userid),"sessionId":str(TestPinTuan.sessionid)})


        # 基础断言（验证状态码 + 响应包含预期文本）
        assert status_code == 200, f"登录接口状态码错误：预期 200，实际 {status_code}"
        # assert "动作 / 剧情 / 犯罪" in response_text, f"登录失败，响应：{response_text[:50]}"

        print(f"状态码：{status_code}")
        print(f"响应内容：{response_text}")

    # 关注电影
    def test_movie_gz(self, api_tool):
        print("\n=== 测试 POST 登录接口 ===")
        print('----', TestPinTuan.userid, TestPinTuan.sessionid, '------')
        # 调用工具类 POST 方法
        list_params = {"movieId": 12, }
        status_code, response_text, response = api_tool.get(path=MOVIE_GZ_PATH, params=list_params,
                                                             head={"userId": str(TestPinTuan.userid),
                                                                    "sessionId": str(TestPinTuan.sessionid)})

        # 基础断言（验证状态码 + 响应包含预期文本）
        assert status_code == 200, f"登录接口状态码错误：预期 200，实际 {status_code}"
        # assert "动作 / 剧情 / 犯罪" in response_text, f"登录失败，响应：{response_text[:50]}"

        print(f"状态码：{status_code}")
        print(f"响应内容：{response_text}")
        print(response)


    # #支付
    # def test_movie_zf(self, api_tool):
    #     print("\n=== 测试 POST 登录接口 ===")
    #     # 调用工具类 POST 方法
    #     zf_data = {"payType": 1, "orderId":""}
    #     status_code, response_text, response = api_tool.post(path=MOVIE_ZF_PATH,data=zf_data,
    #                                                          head={"userId":str(TestPinTuan.userid),"sessionId":str(TestPinTuan.sessionid)})
    #
    #     # 基础断言（验证状态码 + 响应包含预期文本）
    #     assert status_code == 200, f"登录接口状态码错误：预期 200，实际 {status_code}"
    #     # assert "动作 / 剧情 / 犯罪" in response_text, f"登录失败，响应：{response_text[:50]}"
    #
    #     print(f"状态码：{status_code}")
    #     print(f"响应内容：{response_text}")

    # 关注电影
    def test_movie_qxgz(self, api_tool):
        print("\n=== 测试 POST 登录接口 ===")
        print('----', TestPinTuan.userid, TestPinTuan.sessionid, '------')
        # 调用工具类 POST 方法
        list_params = {"movieId": 12, }
        status_code, response_text, response = api_tool.get(path=MOVIE_GZ_PATH, params=list_params,
                                                            head={"userId": str(TestPinTuan.userid),
                                                                    "sessionId": str(TestPinTuan.sessionid)})

        # 基础断言（验证状态码 + 响应包含预期文本）
        assert status_code == 200, f"登录接口状态码错误：预期 200，实际 {status_code}"
        # assert "动作 / 剧情 / 犯罪" in response_text, f"登录失败，响应：{response_text[:50]}"

        print(f"状态码：{status_code}")
        print(f"响应内容：{response_text}")
        print(response)

if __name__ == "__main__":
    # 直接运行测试（也可通过 pytest 命令运行）
    pytest.main(["-s", "test_api_basic.py"])